#include <stdio.h>
#include <math.h>

int maxWidthRamp(int *A, int ASize) {
    int stk[ASize];
    int top = -1;
    int res = 0;
    for (int i = 0; i < ASize; ++i) {
        stk[i] = -100;
    }
    stk[++top] = 0;
    for (int i = 0; i < ASize; ++i) {
        if (A[stk[top]] > A[i]) {
            stk[++top] = i;
        }
    }
    /*
     * 栈为空，退出循环
    其他数组的思考过程都差不多
    为什么逆序？
    是因为我们想找最长的坡，自然从右向左找比较好
    为什么弹栈？
    是因为我们已经找到一个坡了，但不知道是不是最长的，弹栈则可能发现更长的坡
     */
    for (int i = ASize - 1; i >= 0; --i) {
        while (top != -1 && A[stk[top]] <= A[i]) {
            res = fmax(res, i - stk[top]);
            top--;
        }
        if (top == -1) {
            break;
        }
    }
    return res;
}

int main() {
    int test[6] = {6, 0, 8, 2, 1, 5};
    int ret = maxWidthRamp(test, 6);
    printf(" %d", ret);
}